Use case: Initialization, configuration and filter configuration ¶
Sequence diagram ¶
Code snippet ¶
|
HAL1 |
HAL2 |
|---|---|
hfdcan.Instance = FDCAN1;
hfdcan.Init.FrameFormat = FDCAN_FRAME_FD_BRS;
hfdcan.Init.Mode = FDCAN_MODE_NORMAL;
hfdcan.Init.AutoRetransmission = ENABLE;
hfdcan.Init.TransmitPause = DISABLE;
hfdcan.Init.ProtocolException = ENABLE;
hfdcan.Init.NominalPrescaler = 0x1;
hfdcan.Init.NominalSyncJumpWidth = 0x8;
hfdcan.Init.NominalTimeSeg1 = 0x1F;
hfdcan.Init.NominalTimeSeg2 = 0x8;
hfdcan.Init.DataPrescaler = 0x1;
hfdcan.Init.DataSyncJumpWidth = 0x4;
hfdcan.Init.DataTimeSeg1 = 0x5;
hfdcan.Init.DataTimeSeg2 = 0x4;
hfdcan.Init.StdFiltersNbr = 1;
hfdcan.Init.ExtFiltersNbr = 0;
hfdcan.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION;
hfdcan.Init.ClockDivider = FDCAN_CLOCK_DIV2;
HAL_FDCAN_Init(&hfdcan);
sFilterConfig.IdType = FDCAN_STANDARD_ID;
sFilterConfig.FilterIndex = 0;
sFilterConfig.FilterType = FDCAN_FILTER_MASK;
sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;
sFilterConfig.FilterID1 = 0x111;
sFilterConfig.FilterID2 = 0x7FF;
HAL_FDCAN_ConfigFilter(&hfdcan, &sFilterConfig);
HAL_FDCAN_ConfigGlobalFilter(&hfdcan,
FDCAN_REJECT,
FDCAN_REJECT,
FDCAN_REJECT_REMOTE,
FDCAN_REJECT_REMOTE);
HAL_FDCAN_Start(&hfdcan);
|
HAL_FDCAN_Init(&hfdcan, HAL_FDCAN1);
fdcan_config.frame_format = HAL_FDCAN_FRAME_FORMAT_FD_BRS;
fdcan_config.mode = HAL_FDCAN_MODE_NORMAL;
fdcan_config.auto_retransmission = HAL_FDCAN_AUTO_RETRANSMISSION_ENABLE;
fdcan_config.transmit_pause = HAL_FDCAN_TRANSMIT_PAUSE_DISABLE;
fdcan_config.protocol_exception = HAL_FDCAN_PROTOCOL_EXCEPTION_ENABLE;
hal_fdcan_nominal_bit_timing_t fdcan_nominal_bit_timing;
fdcan_nominal_bit_timing.nominal_prescaler = 1;
fdcan_nominal_bit_timing.nominal_jump_width = 8;
fdcan_nominal_bit_timing.nominal_time_seg1 = 31;
fdcan_nominal_bit_timing.nominal_time_seg2 = 8;
hal_fdcan_data_bit_timing_t fdcan_data_bit_timing;
fdcan_data_bit_timing.data_prescaler = 1;
fdcan_data_bit_timing.data_jump_width = 4;
fdcan_data_bit_timing.data_time_seg1 = 5;
fdcan_data_bit_timing.data_time_seg2 = 4;
fdcan_config.nominal_bit_timing = fdcan_nominal_bit_timing;
fdcan_config.data_bit_timing = fdcan_data_bit_timing;
fdcan_config.std_filters_nbr = 1;
fdcan_config.ext_filters_nbr = 0;
fdcan_config.tx_fifo_queue_mode = HAL_FDCAN_TX_MODE_FIFO;
HAL_FDCAN_SetClockDivider(&hfdcan, HAL_FDCAN_CLOCK_DIV_2);
HAL_FDCAN_SetConfig(&hfdcan, &fdcan_config);
filter.id_type = HAL_FDCAN_ID_STANDARD;
filter.filter_index = 0U;
filter.filter_type = HAL_FDCAN_FILTER_TYPE_CLASSIC;
filter.filter_config = HAL_FDCAN_FILTER_TO_RX_FIFO_0;
filter.filter_id1 = 0x111;
filter.filter_id2 = 0x7FF;
HAL_FDCAN_SetFilter(&hfdcan, &filter);
/* Configure global filter to reject non-matching and remote frames */
global_filter.acceptance_non_matching_std = HAL_FDCAN_NON_MATCHING_REJECT;
global_filter.acceptance_non_matching_ext = HAL_FDCAN_NON_MATCHING_REJECT;
global_filter.acceptance_remote_std = HAL_FDCAN_REMOTE_REJECT;
global_filter.acceptance_remote_ext = HAL_FDCAN_REMOTE_REJECT;
HAL_FDCAN_SetGlobalFilter(&hfdcan, &global_filter);
HAL_FDCAN_Start(&hfdcan);
|
Note
In HAL1, if the clock divider is available and set directly within the initialization structure using
hfdcan.Init.ClockDivider = clock_divider.In HAL2, the clock divider configuration is separated from the initialization and must be explicitly set by calling
HAL_FDCAN_SetClockDivider(&hfdcan, clock_divider).
Key changes ¶
HAL2 separates global configuration from initialization using
HAL_FDCAN_SetConfig().HAL2 configures filters using
HAL_FDCAN_SetFilter()andHAL_FDCAN_SetGlobalFilter().When supported by the device, HAL2 configures the clock divider using
HAL_FDCAN_SetClockDivider().

